[C] Decompositor de números em fatores primos

Publicado por Enzo de Brito Ferber 27/06/2007

[ Hits: 10.386 ]

Homepage: http://www.maximasonorizacao.com.br

Download decom_primes.c




Como o nome já diz, um programa escrito em C, que decompõe um número qualquer em fatores primos e exibe estes números para o usuário.

  



Esconder código-fonte

/*
 * Programa: Decompositor de numeros
 * Arquivo : decom_primes.c
 * Autor   : Enzo Ferber 'Slackware_10'
 */

#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0

int *lista_primos(int size){
    int prime, i=0, a, b;
    int *list = (int*)malloc(size*sizeof(int));
    if(!list){
        printf("[-] Erro ao alocar memoria.\n");
        printf("[-] Abortando...\n");
        exit(0);
    }
    for(a=2;a<size;a++){
        prime = FALSE;
        for(b=1;b<=a;b++){
            if(b == a) prime = TRUE;
            if(((a%b)==0) && (b != 1)) break;
        }
        if(prime) list[i] = a;
        if(prime) i += 1;
    }
    list[i] = 0x0;
    return list;
}

int *fatores_primos(int num){
    int *lista = lista_primos(num+1);
    int *fatores = (int*)malloc(num*sizeof(int));
    register int i;
    int div_atual, fat_atual, list_ref, ref;
    
    ref = num;
    fat_atual = 0;
    list_ref = 0;
    div_atual = lista[list_ref];
    
    for(i=0; i<num; i++){
        if(ref == 1){
            fatores[fat_atual] = 1;
            break;
        }
        if((ref % div_atual) == 0){
            ref = ref / div_atual;
            fatores[fat_atual] = div_atual;
            fat_atual++;
        }
        if((ref % div_atual) != 0) div_atual = lista[++list_ref];
    }
    
    free(lista);
    fatores[fat_atual+1] = 0x0;
    return fatores;
}

int main(int argc, char *argv[]){
    int *list;
    if(argc != 2){
        printf("[-] Uso: %s <numero_a_fatorar>\n", argv[0]);
        printf("[-] Abortando...\n");
        exit(0);
    }
    list = fatores_primos(atoi(argv[1]));
    while(*list) printf("%d\n", *list++);
    return 0;
}

    

    

Scripts recomendados

Função para validação de datas

Gerador de CPF em C++

Crud em C++ orientado a objetos com banco de dados MySQL

Também enche a memória, porém desta vez com processos

Converçor de Decimal para Binario


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts